Saham merupkan satuan nilai atau pembukuan dalam berbagai instrumen finansial yang mengacu pada bagian kepemilikan sebuah perusahaan. Perusahaan yang dapat menjual sahamnya ke publik merupakan saham yang sudah listing di bursa atau sudah melakukan Initial Public Offering (IPO). Terdapat sekitar 680 saham per Maret 2020 yang sudah listing di bursa efek Indonesia dan jumlahnya terus bertambah seiring berjalannya waktu. Setiap saham yang melantai dibursa memiliki karakteristik yang berbeda beda baik dari sisi fundamental perusahaan maupun pergerakan harga sahamnya dibursa (teknikal), oleh sebab itu perlu dilakukan pengelompokkan emiten berdasarkan karakteristik dari saham itu sendiri.
Clustering merupakan salah satu teknik dari unsupervised machine learning yang bertujuan mengelompokkan data berdasarkan kemiripan karakteristik antar data. Terdapat banyak pendekatan untuk melakukan clustering seperti partitional methods, density methods, hierarchical methods dll. Setiap metode clustering memiliki kelebihan masing masing seperti metode partitional yang jumlah cluster dapat ditentukan oleh user, dan setiap cluster dapat di cari karakteristiksnya karena memiliki pusat cluster.
Artikel ini akan membahas clustering pada saham di Indonesia menggunakan beberapa algoritma yang berasal dari metode partitional. Setelah melakukan clustering setiap cluster akan dicari karakteristiknya (profiling)
Library yang digunakan pada artikel ini terbagi menjadi 3 kategori yaitu wrangling, visualisasi, dan clustering.
Secara garis besar proses clustering ini memiliki 5 tahapan yaitu :
- Data Collaction : Pengumpulan data dari berbagai sumber.
- Feature Engineering : Mengekstrak feature/ informasi dari data yang ada.
- Anomaly Detection : Mencari data yang bersifat anomali dan menghapusnya sehingga tidak mengganggu cluster yang akan dibentuk.
- Clustering : Mengelompokkan data menjadi beberapa kelompok berdasarkan karakteristik data.
- Cluster Profiling : Mencari karakteristik dari setiap cluster yang sudah terbentuk.
Terdapat 2 sumber data yang digunakan pada analisis ini yaitu data profil perusahaan dan data pergerakan harga saham setiap harinya. Data profil perusahaan didapat dengan cara scraping dari website resmi Bursa Efek Indonesia (IDX). Hasil scraping data kemudian di simpan dalam file daftar_saham.csv. Emiten yang akan dilakukan clustering adalah emiten yang sudah melantai di bursa sebelum tahun 2017, hal ini bertujuan untuk menghindari IPO affect.
profile <- read_csv("data_input/daftar_saham.csv") %>%
mutate(ListingDate = as.Date(ListingDate)) %>%
filter(year(ListingDate) < 2017)
head(profile)Terdapat 6 kolom (variabel) dari data profil perusahaan yaitu :
- Code : Kode emiten perusahaan di bursa.
- Name : Nama perusahaan.
- ListingDate : Tanggal perusahaan pertama kali melantai dibursa (IPO).
- Share : banyaknya lembar sahan suatu perusahaan.
- ListingBoard : Papan pencatatan saham (Pengembangan dan Utama).
- Sector : Kategori perusahaan berdasarkan sektornya.( 9 sektor saham)
Data pergerakan harga saham didapat dari yahoo finance yang bisa langsung diakes menggunakan function tq_get() dari packages tidyquant. Kode emiten saham Indonesia pada yahoo finance diakhiri oleh .JK sebagai tanda bahwa emiten tersebut berasal dari Indonesia.
## [1] "ABBA.JK" "AIMS.JK" "AKKU.JK" "APII.JK" "ARTA.JK"
Setelah kode emiten disesuaikan tahap selanjutnya mengambil data pergerakan harga saham setiap harinya mulai dari awal tahun 2017 hingga akhir tahun 2019 menggunakan function tq_get(). Terdapat beberapa parameter yang harus di isi pada function tq_get() yaitu :
x : Kode emitenfrom : tanggal dimulai harga saham diambilto : tanggal berakhir harga saham diambilData yang diambil langsung dilakukan penghapusan .JK agar code emiten yang didapat sesuai dengan code pada data profile
stocks <- tq_get(emiten_code, from = "2017-01-01", to = "2019-12-31") %>%
mutate(symbol = str_remove_all(symbol, ".JK"))
head(stocks)Pada data stocks terdapat 8 variabel yaitu :
- symbol : Kode Emiten perusahaan di bursa
- date : Tanggal dari harga saham
- open : Harga pembukaan
- high : Harga tertinggi
- low : Harga terendah
- close : Harga penutupan
- volume : banyaknya lembar saham yang diperdagangkan
- adjusted : harga penutupan yang sudah disesuikan dengan aksi korporasi lainnya. adj close
Terdapat beberapa kode saham yang tidak dapat diambil data pergerakan harganya, hal ini disebabkan tidak adanya kode emiten pada yahoo finance. berikut adalah kode emiten tersebut
yahoo_symbols <- stocks %>%
pull(symbol) %>%
unique()
profile %>%
filter(!Code %in% yahoo_symbols) %>%
pull(Code)## [1] "SUGI" "TRIL" "GOLL" "KBRI" "BTEL" "CMPP" "HDTX" "LCGP" "SCBD"
Feature engineering merupakan suatu proses yang menggunakan expert domain knowledge untuk mengekstrak informasi yang ada pada data dengan tujuan meng-improve hasil dari machine learning. Terdapat 3 feature yang akan diekstrak dari data yang ada yaitu volatilitas (Volatility), liquiditas (Liquidity) serta kapasitas (size) dari suatu saham.
Volatilitas merupakan indikator tingkat perubahan harga saham setiap harinya. Volatilitas suatu saham bisa dilihat dari persentase perubahan harga saham setiap harinya. Suatu saham naik dan turun dengan persentase yang besar maka, saham tersebut bisa dikatakan memiliki volatilitas yang tinggi begitu juga sebaliknya. Nilai yang bisa digunakan untuk mengukur tingkat volatilitas suatu saham yaitu standar deviasi dari persentase perubahan harga. Perhitungan standar deviasi dilakukan pada persentase perubahan harga disetiap tahunnya. Semakin besar nilai standar deviasi maka perubahan harga saham dapat berubah dengan cepat setiap harinya.
stocks %>%
na.omit() %>% # remove missing value
mutate(change = (close- lag(close))/lag(close)) %>% # calculate the price change ratio
group_by(symbol, year(date)) %>%
summarise(sdclose = StdDev(change)) %>%
ungroup() %>%
head(6)Likuiditas merupakan indikator seberapa mudah saham tersebut untuk dijual dan dibeli tanpa mempengaruhi harga aset. Likuiditas suatu saham dapat dilihat dari volume saham itu. Semakin besar volume dari suatu saham yang diperdagangkan setiap harinya maka semakin liquid saham tersebut. Median dari volume saham digunakan sebagai indikator likuiditas suatu saham. Pemilihan median sebagai indikator karena sifatnya yang robust terhadap outlier (tidak seperti mean) sehingga hasil yang didapat tidak terdapat bias.
Jumlah saham setiap perusahaan berbeda beda seperti FREN dengan jumlah share 217 milliar sedangkan LPGI hanya 150 juta oleh sebab itu bila nilai pada volume langsung digunakan akan terjadi bias pada informasi yang didapat. Untuk menghindari terjadinya bias volume suatu saham akan dibagi terlebih dahulu dengan jumlah lembar saham (total share) setiap emiten. Total share didapat dari data profile sehingga perlu dilakukan penggabungan 2 data frame (join) terlebih dahulu.
liq_stocks <- stocks %>%
na.omit() %>%
left_join(profile, by = c("symbol" = "Code")) %>%
mutate(volume = volume / Shares) %>%
group_by(symbol, year(date)) %>%
summarise(med_vol = median(volume)) %>%
ungroup() %>%
arrange(desc(med_vol))
head(liq_stocks)Setelah dilakukan penyesuaian pada volume, range dari nilai volume sekarang dari 1 hingga 0. saham dengan tingkat likuiditas terbesar dan terendah berdasarkan median volume dapat dilihat pada plot histogram dibawah.Plot dengan warna merah merupakan saham paling likuid, sedangkan plot yang berwarna biru merupakan saham tidak liquid.
Size merupakan ukuran seberapa besar sebuah perusahaan di pasar saham. Nilai size bisa diwakili oleh market capitalization (market cap), market cap merupakan perkalian antar total share dengan harga saham tersebut. Semakin besar market cap maka semakin sulit untuk harga saham dipermainkan oleh segelintir orang. Harga yang digunakan untuk menghitung market cap adalah harga penutupan di akhir tahun 2019.
Market capitalization terbesar di Indonesia adalah BBCA dengan nilai lebih dari 800 T pertanggal 30 Desember 2019. Market cap besar didominasi dari sektor finance khususnya perbankan (BBCA, BBRI, BMRI,BBNI).
Setelah mengetahui feature apa saja yang akan digunakan dalam proses clustering, tahap selanjutnya adalah menggabungkan semua feature tersebut kedalam satu dataframe.
stocks_agg <- stocks %>%
na.omit() %>%
mutate(change = (close- lag(close))/lag(close)) %>%
group_by(symbol, year(date)) %>%
summarise(sdclose = StdDev(change), # volatility
medvol = round(median(volume)) # liquidity
) %>%
ungroup() %>%
left_join(select(profile, Code, Shares) , by = c("symbol"="Code")) %>%
mutate(medvol = medvol/Shares*100) %>%
select(-Shares) %>%
rename(year = 2)
head(stocks_agg)Hasil aggregasi data diatas mendapatkan 4 variabel yaitu symbol, year, sdclose, medvol. sdclose merupakan standar deviasi dari close price, dan medvol merupakan median dari volume saham yang sudah dibagi dengan total share dari masing masing emiten. Data diatas masih belum dapat digunakan dalam proses clustering dikarenakan setiap emiten blm diwakili oleh satu baris sehingga perlu dilakukan transformasi data menjadi wide format dataframe serta menambahakan data market cap.
data_final <- stocks_agg %>%
rename(year = 2) %>%
pivot_wider(names_from = year, values_from = c(3:4)) %>%
left_join(market_cap) %>%
select(symbol, market_cap, everything()) %>%
replace(is.na(.),0) %>%
column_to_rownames(var = "symbol")
data_finalData untuk proses clustering sudah siap, data_final terdiri dari 510 baris yang setiap barisnya mewakili 1 emiten. Variabel yang digunakan dalam proses clustering terdapat 7 variabel yaitu market_cap, standar deviasi, dan median dari tahun 2017 hingga 2019.
Outlier/anomaly detection merupakan teknik mencari data yang bersifat berbeda eksteam dari data lainnya. Pendeteksian outlier perlu dilakukan mengingat algoritma yang digunakan dalam proses clustering adalah K-Means dan K-Medoid. Algoritma tersebut akan memaksa data yang bersifat outlier untuk masuk kedalam salah satu cluster yang terbentuk, apabila hal itu terjadi maka karakteristik cluster akan berubah signifikan. Ada banyak cara untuk melakukan anomaly detection salah satunya adalah menggunakan algoritma DBSCAN yang merupakan salah satu algoritma clustering berdasarkan kerapatan antar data (density method).
Berbeda dengan algoritma K-Means yang harus menentukan jumlah cluster diawal, metode BDSCAN memerlukan minimum points (minPts) dan epsilon (eps) untuk proses pembuatan clusternya. Pencarian nilai Eps dan MinPts yang optimal bisa dilakukan dengan metode knee plot. Pembuatan knee plot dapat menggunakan fungsi kNNdistplot dari packages dbscan. Ide utama dari fungsi ini adalah menghitung jarak rata2 untuk setiap data ke k tetangga terdekatnya (nearest neighbors). Nilai dari K ditentukan oleh user yang nantinya akan digunakan sebagai minPts pada proses clustering. Rata rata jarak yang sudah didapat divisualisasikan dalam plot secara ascending untuk mendapatkan “knee” yang menunjukkan nilai optimal dari eps berdasarkan K yang ditentukan.
Berdasarkan plot diatas dengan menggunakan K = 8 didapat jarak yang optimal yaitu sekitar 2.5. Nilai 2.5 didapat dari posisi “knee” yang terbentuk pada plot. Hasil pencarian nilai eps yang optimal diatas dapat digunakan dalam proses clustering yang mana nilai eps adalah 2.5 dengan minPts 8. Tahap selanjutnya adalah pembuatan cluster menggunakan function dbscan dengan parameter yang sudah didapat.
## DBSCAN clustering for 510 objects.
## Parameters: eps = 2.5, minPts = 8
## The clustering contains 1 cluster(s) and 10 noise points.
##
## 0 1
## 10 500
##
## Available fields: cluster, eps, minPts
Dari hasil anomaly detection menggunakan metode DBSCAN didapat 10 data noise atau outlier. Label outlier yang sudah didapat (cluster 0) digabungkan dengan data_final dengan tujuan untuk mengetahui saham apa yang dikategorikan outlier.
# cluster yang outlier
data_anomaly <- data_final %>%
rownames_to_column(var = "symbol") %>%
mutate(db_clust = as.factor(dbscan_clust$cluster))
data_anomaly %>%
filter(db_clust==0) %>%
pull(symbol)## [1] "ATIC" "BCIC" "IIKP" "LEAD" "MAMI" "MYRX" "OCAP" "POOL" "RIMO" "TRAM"
Emiten yang diindikasikan sebagai outlier adalah ATIC, BCIC, IIKP, LEAD, MAMI, MYRX, OCAP, POOL, RIMO, TRAM. Untuk melihat seberapa ekstream outlier tersebut secara visual dapat digunakan visualisasi biplot. Biplot merupakan teknik visualisasi dari hasil Principal Component Analysis (PCA). PCA merupakan teknik mereduksi dimensi dengan mempertahankan informasi sebanyak mungkin. Fungsi yang digunakan dalam pembuatan PC adalah PCA(), dan untuk untuk membuat biplot menggunakan plot.PCA() dari package FactoMineR.
data_anomaly %>%
column_to_rownames("symbol") %>%
PCA(graph = F, quali.sup = 8) %>%
plot.PCA(choix = "ind",
select = "contrib10",
habillage = 8,
col.hab = c("red", "black"))Terdapat 2 warna pada biplot diatas yaitu merah dan hitam, emiten dengan warna merah merupakan emiten yang diindikasikan outlier. Emiten yang berwarna merah menyebar cukup jauh dari sebaran data yang lain (warna hitam). Emiten yang diindikasikan sebagai outlier tidak akan digunakan dalam proses clustering agar cluster yang terbentuk representatif.
Data yang akan digunakan dalam proses clustering juga harus dilakukan scaling, hal ini dikarenakan metode K-Means berdasarkan perhitungan jarak antar data (euclidian distance) yang mana range antar data harus sama. proses scaling yang dilakukan menggunakan metode z-score, proses scaling hanya merubah skala dari data tanpa merubah distribusi data awal.
data_final_scale <- data_anomaly %>%
filter(db_clust != 0) %>%
column_to_rownames(var = "symbol") %>%
select(-db_clust) %>%
scale()
tail(data_final_scale)## market_cap sdclose_2017 sdclose_2018 sdclose_2019 medvol_2017
## WSBP -0.09594534 -0.2898713 -0.2501830 -0.78107074 2.6534829
## WSKT 0.11921277 -0.3109128 -0.1543827 -0.45493589 0.7487485
## WTON -0.16844413 -0.2528324 -0.2395274 -0.22551437 0.6106544
## YPAS -0.23142357 -0.2782496 0.6560785 2.75998113 -0.4504959
## YULE -0.22876145 -0.2692605 0.1358728 2.69399375 -0.4456131
## ZBRA -0.23659827 -0.2888215 -0.5748003 0.07454265 -0.4504959
## medvol_2018 medvol_2019
## WSBP 1.7603059 1.0455536
## WSKT 2.1476185 1.5479780
## WTON 0.8025378 1.2339881
## YPAS -0.4460910 -0.4106457
## YULE -0.4460910 -0.4105052
## ZBRA -0.4460910 -0.4108071
K-Means merupakan algoritma clustering yang masuk kedalam kategori partitioning clustering yang berarti jumlah cluster ditentukan oleh user. Algoritma K-Means menghasilkan pusat cluster yang disebut centroid. Centroid dari setiap cluster bukanlah sebuah data melainkan sebuah titik yang merepresentasikan rata-rata (mean) nilai dari setiap variabel di setiap cluster. Penentuan nilai K yang optimum dapat menggunakan teknik elbow method. Elbow method mengoptimalkan jarak antar data ke centroid atau sering disebut within sum of square (wss). Nilai K yang optimum adalah ketika jumlah cluster ditambah namun penurunan wss tidak lagi drastis.
kmeansTunning <- function(data, maxK) {
withinall <- NULL
total_k <- NULL
for (i in 2:maxK) {
set.seed(122)
temp <- kmeans(data,i)$tot.withinss
withinall <- append(withinall, temp)
total_k <- append(total_k,i)
}
plot(x = total_k, y = withinall, type = "o", xlab = "Number of Cluster", ylab = "Total wss")
abline(h = 1080, col = "firebrick3", lty = 2)
}
kmeansTunning(data_final_scale, maxK = 10)Berdasarkan elbow plot diatas dapat dilihat ketika jumlah cluster ditambah dari 7 ke 8 penurunan nilai total withinss sudah tidak pesat lagi, sehingga jumlah cluster yang diambil adalah 7.
set.seed(122)
clust <- kmeans(data_final_scale,7)
fviz_cluster(clust, data_final_scale, ggtheme = theme_minimal()) Dari hasil visualisasi diatas dapat dilihat luas area dan jumlah anggota cluster berbeda. Hasil cluster dapat dilihat pada data dibawah, pada cluster 4 merupakan cluster dengan anggota terkecil yaitu 2 data, sedangkan cluster 2 merupakan cluster terpadat dengan jumlah anggota sebesar 269 data dengan nilai total wss sebesar 272.
kmeans_total <- clust$cluster %>%
table() %>%
as.numeric()
data.frame(cluster = c(1:7),
member = kmeans_total,
wss = clust$withinss) %>%
arrange(wss)Salah satu nilai yang bisa digunakan untuk mengetahui seberapa baik cluster yang dihasilkan oleh algoritma K-Means adalah perbandingan antara nilai between_SS dengan total_SS. hasil pembagian antara between_SS dengan total_SS mengindikasikan seberapa berkumpul data di setiap centroidnya. Hasil yang didapat dari perbandingan kedua nilai tersebut adalah 69.1 % yang mana apabila semakin mendekati 100% semakin baik.
## [1] 69.10109
Sama seperti K-Means, K-Medoid merupakan algoritma clustering yang masuk kedalam kategori partitioning clustering. Berbeda dengan K-Means, pusat cluster dari K-Medoid adalah salah satu data yang ada didalam cluster sehingga pusat cluster disebut medoid. Umumnya untuk menentukan nilai K yang optimum pada K-medoid adalah menggunakan silhouette yang mana teknik ini mencari nilai dissimilarities terendah untuk setiap cluster, namun pada artikel ini akan digunakan WSS agar hasil clustering dapat dibandingkan dengan K-means cluster. untuk mencari nilai WSS yang optimum maka akan digunakan teknik elbow plot.
# Elbow method
fviz_nbclust(data_final_scale, pam, method = "wss") +
geom_vline(xintercept = 8, linetype = 2)+
geom_hline(yintercept = 1100)+
labs(subtitle = "Elbow method")berdasarkan elbow plot didapat jumlah cluster yang optimum adalah 8 dengan total wss 1100. Fungsi yang digunakan untuk membuat K-medoid clustering adalah pam() dari packages cluster. data yang digunakan adalah data yang sama ketika proses pembuatan cluster dengan k-means, dan jumlah cluster yang digunakan adalah 8.
# K-medoid clustering
kmedoid <- pam(x = data_final_scale, k = 8)
# Cluster info
kmedoid$clusinfo %>%
as.data.frame() %>%
mutate(cluster = 1:8,
avg_sil = kmedoid$clus.avg.widths,
medoid = rownames(kmedoid$medoids)) %>%
select(cluster, everything())Hasil clustering menggunakan K-Medoid menghasilkan beberapa informasi untuk setiap clusternya. Terdapat 7 variabel yang menunjukkan informasi seperti berikut :
cluster : Id cluster.size : Banyaknya data dalam cluster.max_diss : Jarak terbesar antar data dalam cluster ke medoid-nya.av_diss : Rata rata jarak antar data ke medoid.diameter : Jarak terbesar antar 2 data dalam 1 cluster.separation : Jarak terkecil antar data dalam cluster ke data pada cluster lain.medoid : Data yang menjadi pusat cluster.Dari data diatas bisa disimpulkan bahwa cluster 8 merupakan cluster dengan nilai separation terbesar yang menunjukkan cluster ini jauh dari cluster yang lain. Cluster lainnya yaitu cluster 2 memiliki diameter terbesar yang menjadikan cluster ini sebagai cluster terluas, sedangkan cluster 5 dengan jumlah anggota 166 dan diameter 2.765 membuat cluster ini menjadi cluster terpadat.Karakteristik tersebut dapat dilihat dalam bentuk visualisasi seperti dibawah.
Hasil clustering antara K-Medoid dan K-Means bila dilihat secara jumlah cluster dan wss tidak tidak terlalu jauh berbeda. K-Means dengan jumlah cluster sebanyak 7 cluster memperoleh wss sebesar 1080 sedangkan K-Medoid dengan jumlah cluster 8 mendapatkan wss sebesar 1100. Bila hasil hasil kedua clustering tersebut dibandingkan secara langsung maka menghasilkan visualisi seperti dibawah.
Hasil visualisasi diatas bisa dilihat bahwa cluster 7 pada K-means memiliki anggota yang sama dengan cluster 7 pada K-medoid. Sedangkan cluster 2 pada K-Means terpecah ke dalam cluster 1, 3, 4, dan 5 pada K-Medoid hal ini disebabkan karena jarak antar cluster yang sangat berdekatan seperti plot dibawah.
ggpubr::ggarrange(
fviz_cluster(clust, data_final_scale, main = "K-Means Clustering", ggtheme = theme_minimal()),
fviz_cluster(kmedoid, data_final_scale, main = "K-Medoid Clustering", ggtheme = theme_minimal()),
ncol = 1
)Berdasarkan nilai wss dan jumlah K, K-Means lebih efektif dibandingkan K-medoid oleh sebab itu cluster pada hasil K-means yang akan digunakan pada proses profiling cluster.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Berdasarkan visualisasi diatas dapat dilihat bahwa cluster 7 merupakan cluster dengan rata rata market cap terbesar, sedangkan cluster 3 merupakan cluster paling liquid, hal ini dikarenakan median dari persentase volumenya paling besar terutama pada tahun 2019. Secara volatilitas cluster 6 sangat mencolok pada tahun 2017, dan pada tahun berikutnya mengalami penurunan yang sangat drastis.
Cluster 3 merupakan cluster dengan anggota 12 emiten. anggota dari cluster ini adalah BCIP, BUMI, CINT, ELSA, ENRG, ERAA, KREN, SIMA, SSIA, SSMS, TARA, WEHA. Cluster ini merupakan cluster dengan tingkat likuiditas tertinggi setiap tahunnya bila dibandingkan dengan clsuter lain.
cluster dengan member terdikit. kenapa? cari tau!! kemungkian dari sd 2018
data_cap <- data_wide %>%
group_by(cluster) %>%
summarise(avg = mean(market_cap)) %>%
ungroup() %>%
mutate(cluster = as.factor(cluster))
ggplot(data = data_cap,aes(x = reorder(cluster, -avg), y = avg)) +
geom_col(fill = "dodgerblue3") +
geom_col(data = filter(data_cap, cluster == 5), fill = "hotpink4") +
theme_pander() +
labs(x = "Cluster",
y = "Average of Market Capitalization on IDR") +
scale_y_continuous(labels = scales::unit_format(scale = 1e-12, unit = "T"))data_wide %>%
ggplot(aes(x = as.factor(cluster), y = sdclose_2019)) +
geom_boxplot() +
theme_pander()data_wide %>%
ggplot(aes(x = as.factor(cluster), y = medvol_2019)) +
geom_boxplot() +
scale_y_log10()Truly gorengan 2019 !!
Cluster 6 merupakan cluster paling volatile di tahun 2017. Bila dilihat dari boxplot nilai standar deviasi tahun 2017 jauh diatas cluster yang lainnya, bahkan nilai minimum dari cluster tersebut lebih tinggi dari nilai maksimum pada cluster lain.
Walaupun pada tahun 2017 cluster ini paling volatile namun hal tersebut berbanding terbalik dengan likuiditasnya. Nilai median dari volume di tahun yang sama menunjukkan cluster ini merupakan cluster paling tidak liquid.
Cluster 7 merupakan cluster dengan jumlah anggota 7 emiten. Cluster ini memiliki rata rata market cap terbesar bila dibandingkan dengan cluster lain. Anggota Dari cluster ini merupakan ASII, BBCA, BBRI, BMRI, HMSP, TLKM, UNVR. Bila dilihat dalam 10 market cap terbesar 7 pertama di isi oleh anggota dari cluster 7.
Dilihat dari volatilitas, saham pada cluster ini cendrung lebih rendah dibandingkan cluster lain, terlebih pada 2 tahun terakhir. Rendahnya volatilitas dapat ditunjukkan pada boxplot dibawah, garis median cluster 7 lebih rendah dibandingkan cluster lain, dan variansi dari data juga cukup kecil terlihat dari tipisnya boxplot yang terbentuk.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
For feature selection